iT邦幫忙

2023 iThome 鐵人賽

DAY 15
0
IT管理

GCP 的 terraform 之旅系列 第 15

day15 Terraform GCP firestore backup(下)

  • 分享至 

  • xImage
  •  

簡介

今天來跟大家介紹昨天撰寫程式的一些細節, 協助大家理解

code

正文

先從 main.tf 看起

provider "google" {
  project = var.project_id
  region  = var.region
}

locals {
  db_name = "(default)"
}

# resource "google_firestore_database" "database" {
#   name = local.db_name

#   location_id = var.region
#   type        = "FIRESTORE_NATIVE"
# }

module "gcs" {
  source     = "./gcs"
  project_id = var.project_id
  location   = var.location
}

module "account" {
  source     = "./account"
  project_id = var.project_id
}

# 設置 IAM 後多等一下, 避免 bug
resource "null_resource" "delay" {
  provisioner "local-exec" {
    command = "sleep 60"
  }
  depends_on = [module.account]
}

module "workflow" {
  source     = "./workflow"
  project_id = var.project_id
  region     = var.region
  file       = "./flow"
  account    = module.account.self_link

  # depends_on = [google_firestore_database.database, module.gcs, module.account]
  depends_on = [module.gcs, null_resource.delay]
}

module "scheduler" {
  source     = "./scheduler"
  project_id = var.project_id
  email      = module.account.mail
  region     = var.region
  name       = module.workflow.name
  bucket     = module.gcs.path
  db         = local.db_name

  depends_on = [module.workflow]
}

可以看出我整體是依照昨天的順序圖來設置相依關係

flowchart LR
    GCS --> WorkFlow
    ServiceAccount --> WorkFlow --> Scheduler

GCS和SA是直接建置的,工作流程稍後才建置,而排程器需要等到工作流程完成建置才能啟動。

在這過程中,你注意到我已經將Firestore數據庫的部分隱藏起來,主要原因是我發現銷毀操作並不會清除數據庫,為了避免混淆,我假設數據庫已經存在。

之後,我完成 IAM 設置後,使用null_resource等待了60秒。這是因為雲資源在設置成功並返回後,仍需要一段時間進行初始化。在這段時間內,如果強制執行操作,可能會引發許多錯誤。因此,當我發現IAM存在某些問題時,我毅然決定添加了這個模組。

最後,我需要仔細思考每個模組的輸入和輸出,以實現理想的封裝效果。

此外如果要重複執行, SA 帳號要換, 我推測因為 SA 不是一刪除就會完全不在的資源, 所以一直用腳本刪除創建會導致 GCP 回傳 401 的錯誤。

未來我應該會考慮依序執行 iam set member 的模組, 可能也可以解決上面的 bug。


上一篇
day14 Terraform GCP firestore backup(上)
下一篇
day16 Terraform GCP Artifact Registry
系列文
GCP 的 terraform 之旅31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言